package com.AdvancedDemos;

public class 递归 {
    static int i = 10;

    public static void main(String[] args) {
        //递归就是在自己方法体中调用自己
        method();
        /*
        在程序设计中尽量少用递归,比较消耗栈内存
         */

        /**
         * 递归求和
         * 求1-5的数据和
         * 理解为求5 + 4~1
         * 5 + 4 + 3~1
         * 5 + 4 + 3 + 2~1
         * 5 + 4 + 3 + 2 + 1
         */
        System.out.println(getSum(5));//15


        /**
         * 求5!
         * 5! = 5 * 4 * 3 * 2 * 1
         */
        System.out.println(求阶乘(5));//120
    }


    /**
     * 递归求阶乘
     *
     * @param num
     * @return int
     */
    public static int 求阶乘(int num) {

        if (num == 1) {
            return 1;
        } else {
            return num * 求阶乘(num - 1);
        }
    }

    /**
     * 递归求和
     *
     * @param target
     * @return int
     */
    public static int getSum(int target) {
        if (target == 1) {//终止条件
            return 1;
        } else {
            return target + getSum(target - 1);//调用自身
        }
    }


    /**
     * 测试递归,打印10次test
     */
    public static void method() {
        System.out.println("test");
        i--;
        if (i > 0) {
            method();   //行号旁边有"递归调用"标记
        }
    }
}
